/**
 侦测器接口
 **/
import { http } from "@/utils/http";
// 参数接口
export interface DetailParams {
  /* */
  factoryId?: string;

  /*id */
  id: number;

  /*额外的参数。例如检测类别 */
  extra?: string;

  /*提醒内容 */
  reminderContent?: string;

  /*记日志 */
  labelName?: string;
}

// 响应接口
export interface DetailRes {
  /*任务id */
  id: number;

  /*工单号 */
  workOrderNo: string;

  /*隔离类型 */
  taskType: string;

  /*施工位置 */
  location: string;

  /*侦测器列表 */
  detectorCodes: string;

  /*状态 */
  taskStatus: number;

  /*状态 */
  taskStatusKey: string;

  /*状态描述 */
  taskStatusDesc: string;

  /*开始时间 */
  startTime: Record<string, unknown>;

  /*结束时间 */
  endTime: Record<string, unknown>;

  /*创建人 */
  creator: number;

  /*创建人姓名 */
  creatorName: string;

  /*创建时间 */
  createTime: Record<string, unknown>;

  /*完成时间 */
  completedTime: Record<string, unknown>;

  /*用时 */
  takeTime: string;

  /*文件ID列表 */
  fileIdList: Record<string, unknown>[];

  /*备注 */
  remark: string;

  /*执行人id列表 */
  executorIdList: Record<string, unknown>[];

  /*执行人姓名 */
  executorName: string;

  /*确认人id列表 */
  confirmorIdList: Record<string, unknown>[];

  /*确认人姓名 */
  confirmorName: string;

  /*侦测器隔离清单 */
  detectorChecklistDTOList: {
    /*设备编号 */
    detectorCode: string;

    /*气体名称 */
    gasName: string;

    /*设备位置 */
    location: string;

    /*备注 */
    remark: string;

    /*主键ID */
    id: number;

    /*主任务ID */
    taskId: number;

    /*工单号 */
    workOrderNo: string;

    /*创建时间 */
    createTime: Record<string, unknown>;

    /*更新时间 */
    updateTime: Record<string, unknown>;

    /*隔离前状态 */
    isolateBeforeStatus: string;

    /*隔离前时间 */
    isolateBeforeTime: Record<string, unknown>;

    /*隔离后状态 */
    isolateAfterStatus: string;

    /*隔离后时间 */
    isolateAfterTime: Record<string, unknown>;

    /*隔离执行结果：1-成功/0-失败 */
    isolateResult: number;

    /*隔离执行次数 */
    isolateNum: number;

    /*解隔离前状态 */
    disisolateBeforeStatus: string;

    /*解隔离前时间 */
    disisolateBeforeTime: Record<string, unknown>;

    /*解隔离后状态 */
    disisolateAfterStatus: string;

    /*解隔离后时间 */
    disisolateAfterTime: Record<string, unknown>;

    /*解隔离执行结果：1-成功/0-失败 */
    disisolateResult: number;

    /*解隔离执行次数 */
    disisolateNum: number;

    /*隔离类型：AUTO-自动/HAND-手动 */
    isolateType: string;

    /*日志文件 */
    logIds: string;
  }[];

  /* */
  isolationSubTaskDTO: {
    /*主键ID */
    id: number;

    /*子任务类型(ISOLATION, DISISOLATION) */
    subTaskType: string;

    /*执行人id */
    executor: number;

    /*确认人id */
    confirmor: number;

    /*文件ID列表 */
    fileIdList: Record<string, unknown>[];

    /*执行备注 */
    executeRemark: string;

    /*执行时间 */
    executeTime: Record<string, unknown>;

    /*确认时间 */
    confirmTime: Record<string, unknown>;
  };

  /* */
  disIsolationSubTaskDTO: {
    /*主键ID */
    id: number;

    /*子任务类型(ISOLATION, DISISOLATION) */
    subTaskType: string;

    /*执行人id */
    executor: number;

    /*确认人id */
    confirmor: number;

    /*文件ID列表 */
    fileIdList: Record<string, unknown>[];

    /*执行备注 */
    executeRemark: string;

    /*执行时间 */
    executeTime: Record<string, unknown>;

    /*确认时间 */
    confirmTime: Record<string, unknown>;
  };

  /*文件ID列表 */
  reportIds: Record<string, unknown>[];
}

/**
 * 侦测器工单详情
 * @param {object} params IdReqDTO
 * @param {string} params.factoryId
 * @param {number} params.id id
 * @param {string} params.extra 额外的参数。例如检测类别
 * @param {string} params.reminderContent 提醒内容
 * @param {string} params.labelName 记日志
 * @returns
 */
export function detail(data: DetailParams): Promise<DetailRes> {
  return http.post(`/erc/api/v1/gas/detector/detail`, { data });
}
// 参数接口
export interface DetailCountParams {
  /*任务id */
  taskId: number;

  /*隔离类型：ISOLATION-隔离, DISISOLATION-解隔离 */
  taskType: string;

  /*执行备注 */
  executeRemark?: string;
}

// 响应接口
export interface DetailCountRes {
  /*隔离类型：ISOLATION-隔离, DISISOLATION-解隔离 */
  taskType: string;

  /*应隔离侦测器总数 */
  totalCount: number;

  /*成功隔离总数 */
  successCount: number;

  /*失败隔离总数 */
  failCount: number;
}

/**
 * 详情页隔离清单状态数量统计接口
 * @param {object} params DetectorTaskReqDTO
 * @param {number} params.taskId 任务id
 * @param {string} params.taskType 隔离类型：ISOLATION-隔离, DISISOLATION-解隔离
 * @param {string} params.executeRemark 执行备注
 * @returns
 */
export function detailCount(data: DetailCountParams): Promise<DetailCountRes> {
  return http.post(`/erc/api/v1/gas/detector/detailCount`, { data });
}
// 参数接口
export interface HandGmsParams {
  /*侦测器隔离清单id */
  id: number;

  /*隔离类型：ISOLATION-隔离, DISISOLATION-解隔离 */
  taskType: string;
}

/**
 * 手动GMS隔离-手动GMS解隔离接口
 * @param {object} params HandGmsReqDTO
 * @param {number} params.id 侦测器隔离清单id
 * @param {string} params.taskType 隔离类型：ISOLATION-隔离, DISISOLATION-解隔离
 * @returns
 */
export function handGms(data: HandGmsParams): Promise<boolean> {
  return http.post(`/erc/api/v1/gas/detector/handGms`, { data });
}
// 参数接口
export interface CommitTaskParams {
  /*任务id */
  taskId: number;

  /*隔离类型：ISOLATION-隔离, DISISOLATION-解隔离 */
  taskType: string;

  /*执行备注 */
  executeRemark?: string;
}
/**
 * 一键隔离-一键解隔离后提交操作用于更新工单状态接口
 * @param {object} params DetectorTaskReqDTO
 * @param {number} params.taskId 任务id
 * @param {string} params.taskType 隔离类型：ISOLATION-隔离, DISISOLATION-解隔离
 * @param {string} params.executeRemark 执行备注
 * @returns
 */
export function commitTask(data: CommitTaskParams): Promise<boolean> {
  return http.post(`/erc/api/v1/gas/detector/commitTask`, { data });
}
// 参数接口
export interface OneTouchHandleParams {
  /*任务id */
  taskId: number;

  /*隔离类型：ISOLATION-隔离, DISISOLATION-解隔离 */
  taskType: string;

  /*执行备注 */
  executeRemark?: string;

  /*解隔离时，跳过侦测器 true,false */
  jump?: boolean;
}

/**
 * 侦测器工单-一键隔离-一键解隔离
 * @param {object} params DetectorTaskReqDTO
 * @param {number} params.taskId 任务id
 * @param {string} params.taskType 隔离类型：ISOLATION-隔离, DISISOLATION-解隔离
 * @param {string} params.executeRemark 执行备注
 * @param {boolean} params.jump 解隔离时，跳过侦测器 true,false
 * @returns
 */
export function oneTouchHandle(data: OneTouchHandleParams): Promise<boolean> {
  return http.post(`/erc/api/v1/gas/detector/oneTouchHandle`, { data });
}
// 参数接口
export interface ListParams {
  /* */
  factoryId?: string;

  /* */
  pageNum?: number;

  /* */
  pageSize?: number;

  /* */
  orderByColumn?: string;

  /* */
  isAsc?: string;

  /*工单号 */
  workOrderNo?: string;

  /*创建人Id */
  creator?: number;

  /*执行人Id */
  executor?: number;

  /*任务状态(INIT未开始[1:未隔离] PROCESSING_ISOLATION隔离执行中[2:隔离已执行 3:隔离已确定] PROCESSING_DISISOLATION解隔离执行中[4:解隔离已通知 5:解隔离已执行] FINISH已完成[6:完成]) */
  taskStatusKey?: string;

  /* */
  taskStatusList?: Record<string, unknown>[];

  /*开始时间 */
  startTime?: Record<string, unknown>;

  /*结束时间 */
  endTime?: Record<string, unknown>;

  /*完成时间开始 */
  completedTimeStart?: Record<string, unknown>;

  /*完成时间结束 */
  completedTimeEnd?: Record<string, unknown>;

  /* */
  orderBy?: string;
}

// 响应接口
export interface ListRes {
  /* */
  pageNum: number;

  /* */
  pageSize: number;

  /* */
  total: number;

  /* */
  pages: number;

  /* */
  data: {
    /*任务id */
    id: number;

    /*工单号 */
    workOrderNo: string;

    /*隔离类型 */
    taskType: string;

    /*施工位置 */
    location: string;

    /*侦测器列表 */
    detectorCodes: string;

    /*状态 */
    taskStatus: number;

    /*状态 */
    taskStatusKey: string;

    /*状态描述 */
    taskStatusDesc: string;

    /*开始时间 */
    startTime: Record<string, unknown>;

    /*结束时间 */
    endTime: Record<string, unknown>;

    /*创建人 */
    creator: number;

    /*创建人姓名 */
    creatorName: string;

    /*创建时间 */
    createTime: Record<string, unknown>;

    /*完成时间 */
    completedTime: Record<string, unknown>;

    /*用时 */
    takeTime: string;

    /*文件ID列表 */
    fileIdList: Record<string, unknown>[];

    /*备注 */
    remark: string;

    /*执行人id列表 */
    executorIdList: Record<string, unknown>[];

    /*执行人姓名 */
    executorName: string;

    /*确认人id列表 */
    confirmorIdList: Record<string, unknown>[];

    /*确认人姓名 */
    confirmorName: string;

    /*侦测器隔离清单 */
    detectorChecklistDTOList: {
      /*设备编号 */
      detectorCode: string;

      /*气体名称 */
      gasName: string;

      /*设备位置 */
      location: string;

      /*备注 */
      remark: string;

      /*主键ID */
      id: number;

      /*主任务ID */
      taskId: number;

      /*工单号 */
      workOrderNo: string;

      /*创建时间 */
      createTime: Record<string, unknown>;

      /*更新时间 */
      updateTime: Record<string, unknown>;

      /*隔离前状态 */
      isolateBeforeStatus: string;

      /*隔离前时间 */
      isolateBeforeTime: Record<string, unknown>;

      /*隔离后状态 */
      isolateAfterStatus: string;

      /*隔离后时间 */
      isolateAfterTime: Record<string, unknown>;

      /*隔离执行结果：1-成功/0-失败 */
      isolateResult: number;

      /*隔离执行次数 */
      isolateNum: number;

      /*解隔离前状态 */
      disisolateBeforeStatus: string;

      /*解隔离前时间 */
      disisolateBeforeTime: Record<string, unknown>;

      /*解隔离后状态 */
      disisolateAfterStatus: string;

      /*解隔离后时间 */
      disisolateAfterTime: Record<string, unknown>;

      /*解隔离执行结果：1-成功/0-失败 */
      disisolateResult: number;

      /*解隔离执行次数 */
      disisolateNum: number;

      /*隔离类型：AUTO-自动/HAND-手动 */
      isolateType: string;

      /*日志文件 */
      logIds: string;
    }[];

    /* */
    isolationSubTaskDTO: {
      /*主键ID */
      id: number;

      /*子任务类型(ISOLATION, DISISOLATION) */
      subTaskType: string;

      /*执行人id */
      executor: number;

      /*确认人id */
      confirmor: number;

      /*文件ID列表 */
      fileIdList: Record<string, unknown>[];

      /*执行备注 */
      executeRemark: string;

      /*执行时间 */
      executeTime: Record<string, unknown>;

      /*确认时间 */
      confirmTime: Record<string, unknown>;
    };

    /* */
    disIsolationSubTaskDTO: {
      /*主键ID */
      id: number;

      /*子任务类型(ISOLATION, DISISOLATION) */
      subTaskType: string;

      /*执行人id */
      executor: number;

      /*确认人id */
      confirmor: number;

      /*文件ID列表 */
      fileIdList: Record<string, unknown>[];

      /*执行备注 */
      executeRemark: string;

      /*执行时间 */
      executeTime: Record<string, unknown>;

      /*确认时间 */
      confirmTime: Record<string, unknown>;
    };

    /*文件ID列表 */
    reportIds: Record<string, unknown>[];
  }[];
}

/**
 * 侦测器工单列表
 * @param {object} params QueryDetectorTaskDataReqDTO
 * @param {string} params.factoryId
 * @param {number} params.pageNum
 * @param {number} params.pageSize
 * @param {string} params.orderByColumn
 * @param {string} params.isAsc
 * @param {string} params.workOrderNo 工单号
 * @param {number} params.creator 创建人Id
 * @param {number} params.executor 执行人Id
 * @param {string} params.taskStatusKey 任务状态(INIT未开始[1:未隔离] PROCESSING_ISOLATION隔离执行中[2:隔离已执行 3:隔离已确定] PROCESSING_DISISOLATION解隔离执行中[4:解隔离已通知 5:解隔离已执行] FINISH已完成[6:完成])
 * @param {array} params.taskStatusList
 * @param {object} params.startTime 开始时间
 * @param {object} params.endTime 结束时间
 * @param {object} params.completedTimeStart 完成时间开始
 * @param {object} params.completedTimeEnd 完成时间结束
 * @param {string} params.orderBy
 * @returns
 */
export function list(data: ListParams): Promise<ListRes> {
  return http.post(`/erc/api/v1/gas/detector/list`, { data });
}
// 响应接口
export interface ListCountRes {
  /*今日解隔离工单总数 */
  totalCount: number;

  /*今日解隔离工单完成数 */
  finishCount: number;

  /*今日未完成工单总数 */
  unFinishCount: number;

  /*历史未执行工单总数 */
  unStartCount: number;
}

/**
 * 列表页工单数量统计接口
 * @returns
 */
export function listCount(): Promise<ListCountRes> {
  return http.post(`/erc/api/v1/gas/detector/listCount`);
}
// 获取报警数目
export const getAlarmCount = (data?: Record<string, any>) => {
  return http.request("post", "/erc/api/v1/gas/detector/listCount", {
    data
  });
};
// 参数接口
export interface QueryForUpdateAfterParams {
  /*任务id */
  taskId: number;

  /*隔离类型：ISOLATION-隔离, DISISOLATION-解隔离 */
  taskType: string;

  /*执行备注 */
  executeRemark?: string;
}

/**
 * 一键隔离,解隔离后查询更新后状态
 * @param {object} params DetectorTaskReqDTO
 * @param {number} params.taskId 任务id
 * @param {string} params.taskType 隔离类型：ISOLATION-隔离, DISISOLATION-解隔离
 * @param {string} params.executeRemark 执行备注
 * @returns
 */
export function queryForUpdateAfter(data: QueryForUpdateAfterParams): Promise<boolean> {
  return http.post(`/erc/api/v1/gas/detector/queryForUpdateAfter`, { data });
}
// 参数接口
export interface DisisolationCheckParams {
  /*任务id */
  taskId: number;

  /*隔离类型：ISOLATION-隔离, DISISOLATION-解隔离 */
  taskType: string;

  /*执行备注 */
  executeRemark?: string;

  /*解隔离时，跳过侦测器 true,false */
  jump?: boolean;
}

/**
 * 一键解隔离校验
 * @param {object} params DetectorTaskReqDTO
 * @param {number} params.taskId 任务id
 * @param {string} params.taskType 隔离类型：ISOLATION-隔离, DISISOLATION-解隔离
 * @param {string} params.executeRemark 执行备注
 * @param {boolean} params.jump 解隔离时，跳过侦测器 true,false
 * @returns
 */
export function disisolationCheck(data: DisisolationCheckParams) {
  return http.post(`/erc/api/v1/gas/detector/disisolationCheck`, { data: { taskType: "DISISOLATION", ...data } });
}
